package apartado2;

import aima.core.search.framework.HeuristicFunction;
import aima.core.util.datastructure.XYLocation;

public class FuncionHeuristicaCasillasDescolocadas implements HeuristicFunction {
	public double h(Object estado) {
		OchoPuzzleTablero tablero = (OchoPuzzleTablero) estado;
		return getNumeroDeCasillasDescolocadas(tablero);
	}

	private int getNumeroDeCasillasDescolocadas(OchoPuzzleTablero tablero) {
		int numeroDeCasillasDescolocadas = 0;
		if (!(tablero.getPosicionOf(0).equals(new XYLocation(0, 0)))) {
			numeroDeCasillasDescolocadas++;
		}
		if (!(tablero.getPosicionOf(1).equals(new XYLocation(0, 1)))) {
			numeroDeCasillasDescolocadas++;
		}
		if (!(tablero.getPosicionOf(2).equals(new XYLocation(0, 2)))) {
			numeroDeCasillasDescolocadas++;
		}
		if (!(tablero.getPosicionOf(3).equals(new XYLocation(1, 0)))) {
			numeroDeCasillasDescolocadas++;
		}
		if (!(tablero.getPosicionOf(4).equals(new XYLocation(1, 1)))) {
			numeroDeCasillasDescolocadas++;
		}
		if (!(tablero.getPosicionOf(5).equals(new XYLocation(1, 2)))) {
			numeroDeCasillasDescolocadas++;
		}
		if (!(tablero.getPosicionOf(6).equals(new XYLocation(2, 0)))) {
			numeroDeCasillasDescolocadas++;
		}
		if (!(tablero.getPosicionOf(7).equals(new XYLocation(2, 1)))) {
			numeroDeCasillasDescolocadas++;
		}
		if (!(tablero.getPosicionOf(8).equals(new XYLocation(2, 2)))) {
			numeroDeCasillasDescolocadas++;
		}
		return numeroDeCasillasDescolocadas;
	}
}
